// 1.创建一个新的axios实例
// 2.请求拦截器，如果有token进行头部携带
// 3.响应拦截器：1.剥离无效数据 2.处理token失效
// 4.导出一个函数，调用当前的axios实例发请求，返回值promise
import axios from 'axios'
import store from '@/store'
import router from '@/router'
// 导出基准地址，原因：其他地方不是通过axios发请求的地方用上基准地址
export const baseURL = 'http://pcapi-xiaotuxian-front-devtest.itheima.net/'
const instance = axios.create({
    //  axios的一些配置，baseURL timeout
    baseURL,
    timeout: 6666
})
instance.interceptors.request.use(config => {
        // 1. 获取token => {
        // 拦截业务逻辑
        // 进行请求配置的修改
        // 如果本地有token就在头部携带
        // 1.获取用户信息对象
        const { profile } = store.state.user
        if (profile.token) {
            config.headers.Authorization = `Bearer ${profile.token}`
        }
        return config
    }, err => {
        return Promise.reject(err)
    })
    // res=>res.data,取出data数据，将来调用接口的时候直接拿到就是后台的数据
instance.interceptors.response.use(res => res.data, err => {
        // 401状态码，进入该函数
        if (err.response && err.response.status == 401) {
            // 1.清空无效用户信息
            // 2.跳转到登陆页码
            // 3.跳转需要传参（当前路由地址）给登录页码

            store.commit('user/setUser', {})
                //当前路由地址
                // 组件里头：
                // router.replace('/login?redirectUrl=' + redirectUrl)
                // router.currentRoute.fullPath 就是当前路由地址
                // router.currentRoute是·ref响应式
                // const redirectUrl = encodeURIComponent(router.currentRoute.value.fullPath)
            const fullPath = encodeURIComponent(router.currentRoute.value.fullPath)
            router.push('/ login ? redirectUrl = ' + fullPath)

        }
        return Promise.reject(err)
            /**
             * @param {String} - url  请求地址
             * @param {String} - method  请求类型
             * @param {Object} - submitData  对象类型，提交数据
             */
    })
    // 请求工具函数
    // const request = (url, method, submitData) => {
    //     return instance({
    //         url,
    //         method,
    //         [method.toLowerCase() === 'get' ? 'params' : 'data']: submitData
    //     })
    // }
    // export default request
    // 如果是get请求，需要params传递
    // 不是get请求，需要使用date传递
    // [method === 'get' ? 'params' : 'data']: submitData
export default (url, method, submitData) => {
    return instance({
        url,
        method,
        [method.toLowerCase() === 'post' ? 'params' : 'data']: submitData
    })
}

// const request=()=>{

// }